package leetcode.set_map;

import java.util.*;

/**
 * 49. 字母异位词分组
 * <p>
 * 给定一个字符串数组，将字母异位词组合在一起。字母异位词指字母相同，但排列不同的字符串。
 * <p>
 * 示例:
 * <p>
 * 输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出:
 * [
 * ["ate","eat","tea"],
 * ["nat","tan"],
 * ["bat"]
 * ]
 * <p>
 * 说明：
 * <p>
 * 所有输入均为小写字母。
 * 不考虑答案输出的顺序。
 * <p>
 * 所有都是字母， 那么我们可以采取一种方式 就是将每一个字符串计算出一个key  key计算方式 ： 给每一个字母分别记为不同的质数，然后进行*操作。
 * 方式2 对每一个单词进行排序，hashmap k-sort  v--strs
 */
public class Solution49 {
    public static List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> mlist = new HashMap<>();
//     切分字符串为单词
        for (int i = 0; i < strs.length; i++) {
            String str = strs[i];
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            StringBuffer sb = new StringBuffer();
            for (int j = 0; j < chars.length; j++) {
                sb.append(chars[j]);
            }
            String key = sb.toString();

            if (mlist.containsKey(key)) {
                List<String> list = mlist.get(key);
                list.add(str);
            } else {
                List<String> ls = new ArrayList<>();
                ls.add(str);
                mlist.put(key, ls);
            }
        }

        return new ArrayList<>(mlist.values());
    }

    public static void main(String[] args) {
        String[] str = {"eat", "tea", "tan", "ate", "nat", "bat"};
        groupAnagrams(str);

    }
}
